Circuit Breaker Pattern একটি ডিজাইন প্যাটার্ন যা মাইক্রোসার্ভিস বা ডিসট্রিবিউটেড সিস্টেমে ব্যবহৃত হয়। এর প্রধান উদ্দেশ্য হলো নির্ভরশীল সিস্টেম বা সার্ভিসে ব্যর্থতার কারণে অ্যাপ্লিকেশনের বাকি অংশে প্রভাব পড়া থেকে রক্ষা করা। এটি এমন একটি প্রক্রিয়া যেখানে সার্ভিসে সমস্যা হলে ঐ সার্ভিসের প্রতি রিকোয়েস্ট সাময়িকভাবে বন্ধ (open) করে রাখা হয় এবং সময়মতো পুনরায় পরীক্ষা (retry) করে দেখা হয়।
Circuit Breaker তিনটি স্টেটে কাজ করে:
Spring Boot এ Circuit Breaker ইমপ্লিমেন্ট করতে Resilience4j বা Spring Cloud Circuit Breaker ব্যবহার করা হয়।
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
resilience4j:
circuitbreaker:
configs:
default:
slidingWindowSize: 10
failureRateThreshold: 50
waitDurationInOpenState: 5000ms
permittedNumberOfCallsInHalfOpenState: 3
instances:
myCircuitBreaker:
baseConfig: default
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class ApiService {
private final RestTemplate restTemplate = new RestTemplate();
@CircuitBreaker(name = "myCircuitBreaker", fallbackMethod = "fallbackResponse")
public String fetchData() {
String url = "https://api.example.com/data";
return restTemplate.getForObject(url, String.class);
}
// Fallback Method
public String fallbackResponse(Throwable t) {
return "Default Response: Service is temporarily unavailable.";
}
}
Actuator ব্যবহার করে Circuit Breaker এর স্টেট মনিটর করতে পারেন।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management:
endpoints:
web:
exposure:
include: resilience4j.circuitbreakers
GET http://localhost:8080/actuator/resilience4j/circuitbreakers
{
"data": "Successfully fetched data from the API."
}
{
"data": "Default Response: Service is temporarily unavailable."
}
এইভাবে, Circuit Breaker Pattern ইমপ্লিমেন্ট করে আপনি আপনার অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং নির্ভরযোগ্য করে তুলতে পারবেন।
Read more